﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace PmSadis.Providers
{
    /// <summary>
    /// Провайдер настроек приложения
    /// </summary>
    public static class AppSettings
    {
        /// <summary>
        /// Начальный день отчетного месяца
        /// </summary>
        public static int StartDayMonth
        {
            get
            {
                var day = CheckValueInConfig("startDayMonth");

                return Convert.ToInt32(day);
            }
        }

        /// <summary>
        /// Конечный день отчетного месяца
        /// </summary>
        public static int EndDayMonth
        {
            get
            {
                var day = CheckValueInConfig("endDayMonth");

                return Convert.ToInt32(day);
            }
        }

        /// <summary>
        /// Дата начала заключения контрактов
        /// </summary>
        public static DateTime StartDate
        {
            get
            {
                var date = CheckValueInConfig("startDate");

                var tempResult = date.Split('-');
                var newDate= (new DateTime(Convert.ToInt32(tempResult[1]), Convert.ToInt32(tempResult[0]), StartDayMonth)).Date.AddMonths(-1);
                return newDate;
            }
        }

        /// <summary>
        /// Дата окончания заключения контрактов
        /// </summary>
        public static DateTime EndDate
        {
            get
            {
                var date = CheckValueInConfig("endDate");

                var tempResult = date.Split('-');
                var newDate = (new DateTime(Convert.ToInt32(tempResult[1]), Convert.ToInt32(tempResult[0]), EndDayMonth)).Date.AddDays(1).AddSeconds(-1);
                return newDate;
            }
        }

        /// <summary>
        /// Проверить наличие параметра в настройках сайта и выбросить исключение в случае отсутствия
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        private static string CheckValueInConfig(string name)
        {
            var date = ConfigurationManager.AppSettings[name];
            if (string.IsNullOrEmpty(date))
                throw new SettingsPropertyNotFoundException(string.Format("В конфигурационном файле не задан параметр \"{0}\"", name));
            return date;
        }

    }
}
